package la.foton.atividade.controller;

import java.util.Collection;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.RequestScoped;
import la.foton.atividade.entity.CasoDeUso;
import la.foton.atividade.entity.Projeto;
import la.foton.atividade.entity.Solicitacao;
import la.foton.atividade.service.CasoDeUsoService;
import la.foton.atividade.service.ProjetoService;
import la.foton.atividade.service.SolicitacaoService;
import org.primefaces.event.RowEditEvent;

@ManagedBean(name = "solicitacaoBean")
@RequestScoped
public class SolicitacaoBean extends BaseBean {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

   @ManagedProperty("#{solicitacaoService}")
   private SolicitacaoService solicitacaoService;
   @ManagedProperty("#{projetoService}")
   private ProjetoService projetoService;
   @ManagedProperty("#{casoDeUsoService}")
   private CasoDeUsoService casoDeUsoService;
   private List<Solicitacao> listAllSolicitacoes;
   private Solicitacao solicitacao;
   private List<Projeto> listAllProjetos;
   private List<CasoDeUso> listAllCasoDeUso;


	public SolicitacaoBean()
   {

	}

   @PostConstruct
   private void init()
   {
      solicitacao = new Solicitacao();
   }

   public void incluir()
   {
      solicitacaoService.create(solicitacao);
      atualizarListaSolicitacoes();
		clean();
      addInfoMessage("Solicitação criada com sucesso.");
	}


   public void atualizarListaSolicitacoes()
   {
      listAllSolicitacoes = solicitacaoService.getAll();
   }

   public void atualizarListaProjetos()
   {
      listAllProjetos = projetoService.getAll();
   }

   public void atualizarListaCasoDeUso()
   {
      listAllCasoDeUso = casoDeUsoService.getAll();
   }

   public Collection<Solicitacao> getValuesComboBoxSolicitacao()
   {
      return getListAllSolicitacoes();
   }

	public void clean() {
      /*
       * this.nomeCliente = ""; this.nomeProjeto = "";
       */
	}

	public void onEdit(RowEditEvent event) {
      Solicitacao solicitacao = (Solicitacao) event.getObject();
      solicitacaoService.update(solicitacao);
      atualizarListaSolicitacoes();
      addInfoMessage("Solicitação alterada com sucesso!!");
	}

	public void onCancel(RowEditEvent event) {
      Solicitacao solicitacao = (Solicitacao) event.getObject();
      solicitacaoService.deleteById(solicitacao);
      atualizarListaSolicitacoes();
      addInfoMessage(solicitacao.getId() + " excluido");
	}

   /**
    * Recupera o valor do atributo solicitacaoService
    * 
    * @return o solicitacaoService
    */
   public SolicitacaoService getSolicitacaoService()
   {
      return solicitacaoService;
   }

   /**
    * Atribui o novo valor de solicitacaoService
    * 
    * @param solicitacaoService solicitacaoService que será atribuído
    */
   public void setSolicitacaoService(SolicitacaoService solicitacaoService)
   {
      this.solicitacaoService = solicitacaoService;
   }

   /**
    * Recupera o valor do atributo listAllSolicitacoes
    * 
    * @return o listAllSolicitacoes
    */
   public List<Solicitacao> getListAllSolicitacoes()
   {
      if (listAllSolicitacoes == null)
      {
         atualizarListaSolicitacoes();
      }
      return listAllSolicitacoes;
   }

   /**
    * Atribui o novo valor de listAllSolicitacoes
    * 
    * @param listAllSolicitacoes listAllSolicitacoes que será atribuído
    */
   public void setListAllSolicitacoes(List<Solicitacao> listAllSolicitacoes)
   {
      this.listAllSolicitacoes = listAllSolicitacoes;
   }


   /**
    * Recupera o valor do atributo solicitacao
    * 
    * @return o solicitacao
    */
   public Solicitacao getSolicitacao()
   {
      return solicitacao;
   }

   /**
    * Atribui o novo valor de solicitacao
    * 
    * @param solicitacao solicitacao que será atribuído
    */
   public void setSolicitacao(Solicitacao solicitacao)
   {
      this.solicitacao = solicitacao;
   }

   /**
    * Recupera o valor do atributo projetoService
    * 
    * @return o projetoService
    */
   public ProjetoService getProjetoService()
   {
      return projetoService;
   }

   /**
    * Atribui o novo valor de projetoService
    * 
    * @param projetoService projetoService que será atribuído
    */
   public void setProjetoService(ProjetoService projetoService)
   {
      this.projetoService = projetoService;
   }

   /**
    * Recupera o valor do atributo listAllProjetos
    * 
    * @return o listAllProjetos
    */
   public List<Projeto> getListAllProjetos()
   {
      if (listAllProjetos == null)
      {
         atualizarListaProjetos();
      }

      return listAllProjetos;
   }

   /**
    * Atribui o novo valor de listAllProjetos
    * 
    * @param listAllProjetos listAllProjetos que será atribuído
    */
   public void setListAllProjetos(List<Projeto> listAllProjetos)
   {
      this.listAllProjetos = listAllProjetos;
   }

   /**
    * Recupera o valor do atributo casoDeUsoService
    * 
    * @return o casoDeUsoService
    */
   public CasoDeUsoService getCasoDeUsoService()
   {
      return casoDeUsoService;
   }

   /**
    * Atribui o novo valor de casoDeUsoService
    * 
    * @param casoDeUsoService casoDeUsoService que será atribuído
    */
   public void setCasoDeUsoService(CasoDeUsoService casoDeUsoService)
   {
      this.casoDeUsoService = casoDeUsoService;
   }


   /**
    * Recupera o valor do atributo listAllCasoDeUso
    * @return o listAllCasoDeUso
    */
   public List<CasoDeUso> getListAllCasoDeUso()
   {
      if (listAllCasoDeUso == null)
      {
         atualizarListaCasoDeUso();
      }

      return listAllCasoDeUso;
   }


   /**
    * Atribui o novo valor de listAllCasoDeUso
    * @param listAllCasoDeUso listAllCasoDeUso que será atribuído
    */
   public void setListAllCasoDeUso(List<CasoDeUso> listAllCasoDeUso)
   {
      this.listAllCasoDeUso = listAllCasoDeUso;
   }


}
